package com.demo.qqserver.service;

import com.demo.qqcommon.Message;
import com.demo.qqcommon.MessageType;
import com.demo.utils.Utility;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author gy
 * @date 2022/5/8
 * 推送新闻的线程
 */
public class SendNewsToAllService implements Runnable{

    private Scanner scanner = new Scanner(System.in);

    @Override
    public void run() {
        // 为了可以推送多次新闻，使用while
        while (true) {
            System.out.println("请输入要推送的新闻/ 消息【输入 exit 表示退出推送服务线程】");
            String news = Utility.readString(1000);
            if("exit".equals(news)){
                System.out.println("服务器推送消息 已关闭");
                break;
            }
            // 创建一个消息，群发消息
            Message msg = new Message();
            msg.setSender("服务器");
            // 一定要记得设置消息类型，不然客户端不知道该如何处理
            msg.setMsgType(MessageType.MESSAGE_TO_ALL_MES);
            msg.setContent(news);
            String currentTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            msg.setSentTime(currentTime);
            System.out.println("服务器推送消息给所有人 说: " + news);

            // 遍历档期那所有的通信线程，得到socket，并发送msg
            HashMap<String, ServerConnectClientThread> hm = ManageClientsThread.getHm();
            hm.keySet().stream().forEach(n -> {
                Socket socket = ManageClientsThread.getServerConnectClientThread(n).getSocket();
                try {
                    ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                    oos.writeObject(msg);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }
    }
}
